#include<iostream>
using namespace std;
int cargarEmails(string vec[]);
int pedirOpcion ();
void mostrarEmails (string vec[], int cant);
int cantidadDominiosAR (string vec [], int cant);
int cantidadDominios (string vec[], int cant, string dominio);
void emailsInvalidos (string vec[], int cant);
void emailsConUsuariosIguales (string vec[], int cant);
string separarusuario (string palabra);
void vectorfalso (string vec2[], string vec[], int cant);
int main()
{
    string vecEmails[50];
    int cantEmails = 0;
    int opcion;
    cout<<"Ingrese direcciones de e-mail (maximo 50) y escriba listo para finalizar "<<endl;
    cantEmails = cargarEmails (vecEmails);
    opcion = pedirOpcion();
    while (opcion!=6)
    {
        switch (opcion)
        {
            case 1:
                mostrarEmails(vecEmails, cantEmails);
                break;
            case 2:
                cout << cantidadDominiosAR(vecEmails, cantEmails)<<endl;
                break;
            case 3:
                cout << "Hotmail:" << cantidadDominios(vecEmails, cantEmails, "hotmail")<<endl;
                cout << "Gmail:" << cantidadDominios(vecEmails, cantEmails, "gmail")<<endl;
                cout << "Yahoo:" << cantidadDominios(vecEmails, cantEmails, "yahoo")<<endl;
                break;
            case 4:
                emailsInvalidos (vecEmails, cantEmails);
                break;
            case 5:
                emailsConUsuariosIguales (vecEmails, cantEmails);
                break;
        }
        opcion = pedirOpcion();
    }
    return 1;
}
int cargarEmails(string vec[])
{
    int i = 0;
    while (i<50)
    {
        cout<<"Ingrese el e-mail "<<i+1<<" : ";
        cin>>vec[i];
        if (vec[i]=="listo")
        {
            break;
        }
        i++;
    }
    return i;
}
int pedirOpcion ()
{
    int opcion,flag;
    flag=0;
    cout<<endl<<"--------------------------------------------------------------------------------"<<endl;
    cout<<"Menu:"<<endl<<endl<<"1. Mostrar Emails"<<endl<<endl<<"2. Cantidad de dominios .ar"<<endl<<endl;
    cout<<"3. Cantidad de dominios de: hotmail, gmail, yahoo"<<endl<<endl<<"4. Mostrar Emails invalidos "<<endl<<endl<<"5. Mostrar Emails con usuarios iguales"<<endl<<endl;
    cout<<"6. Salir "<<endl<<endl<<"Seleccione una opcion: ";
    while (flag!=1)
    {
        cin>>opcion;
        if (opcion>0 && opcion<8)
            flag=1;
        else
        {
            cout<<"Error"<<endl<<endl<<"Seleccione una opcion de nuevo: ";
        }
    }
    cout<<endl<<"--------------------------------------------------------------------------------"<<endl;
    return opcion;
}
void mostrarEmails (string vec[], int cant)
{
    int i;
    i=0;
    while (i!=cant)
    {
        cout<<"El email "<<i+1<<" del vector es: "<<vec[i]<<endl;
        i++;
    }
    return;
}
int cantidadDominiosAR (string vec [], int cant)
{
    string palabra;
    int i,dominiosAR;
    i=0;
    dominiosAR=0;
    while (i<cant)
    {
        palabra=vec[i];
        if (palabra[palabra.length()-3]=='.' && palabra[palabra.length()-2]== 'a' && palabra[palabra.length()-1]=='r')
        {
            dominiosAR++;
        }
        i++;
    }
    cout<<"Total de domios AR: ";
    return dominiosAR;
}
int cantidadDominios (string vec[], int cant, string dominio)
{
    string palabra;
    int i,letra,aux,dominiot,flag;
    i=0;
    dominiot=0;
    while (i!=cant)
    {
        palabra=vec[i];
        letra=palabra.length()-1;
        flag=0;
        while (letra!=-1 && flag!=1)
        {
            if (palabra[letra]=='@')
            {
                aux=letra;
                while (palabra[aux]!='.')
                {
                    aux++;
                }
                palabra=palabra.substr(letra+1,(aux-letra)-1);
                if (palabra==dominio)
                {
                    dominiot++;
                    flag=1;
                }
            }
            letra--;
        }
        i++;
    }
    return dominiot;
}

void emailsInvalidos (string vec[], int cant)
{
    string palabra;
    int i,letra,flag,cont;
    i=0;
    cont=0;
    while (i!=cant  )

    {
        palabra=vec[i];
        letra=palabra.length();
        flag=0;
        while (letra!=-1 && flag!=1 )
        {
            if (palabra [letra]=='"' || palabra [letra]=='#' || palabra [letra]=='&' || palabra [letra]=='<' || palabra [letra]=='>' || palabra [letra]=='*' || palabra [letra]=='$' || palabra [letra]=='+')
            {
                cout<<"El email "<<vec[i]<<" es invalido"<<endl;
                flag=1;
            }
            letra--;
         while(letra<palabra.length())
         {
            if(palabra[letra]=='@')
            {
                cont++;
            }
            letra++;
         }
         if (cont!=1);
         cout<<"El email "<<vec[i]<<" es invalido"<<endl;
         }
         i++;
    }

    return;
}


void emailsConUsuariosIguales (string vec[], int cant)
{
    int i,i2,flag;
    string vec2 [50];
    string palabra,palabra2;
    vectorfalso (vec2, vec, cant);
    i=0;
    while (i<cant)
    {
        palabra=vec2[i];
        if (palabra!="*")
        {
            palabra = separarusuario (palabra);
        }
        i2=i;
        flag=0;
        while (i2 < cant && flag!=1 && vec2 [i2] != "*")
        {
           if (i!=i2)
           {
                palabra2=vec2[i2];
                if (palabra!="*")
                {
                    palabra2 = separarusuario (palabra2);
                }
                if (palabra2==palabra)
                {
                    cout<<"El usuario "<<palabra<<" se repite en mas de un email"<<endl;
                    vec2[i2]='*';
                    flag=1;
                }
           }
           i2++;
        }
        i++;
    }
    return;
}
string separarusuario (string palabra)
{
    int letra=0;
    while (palabra[letra]!='@')
    {
        letra++;
    }
    palabra=palabra.substr (0,letra);
    return palabra;
}
void vectorfalso (string vec2[], string vec[], int cant)
{
    int i;
    i=0;
    while (i<cant)
    {
        vec2[i]=vec[i];
        i++;
    }
    return;
}
